package avaliacao.DAO;

import avaliacao.DTO.DTOUniversidade;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Vector;

public class DAOUniversidade extends DAO{

    static final String TB_UNIVERSIDADE = "escola";
    static final String TB_UNIVERSIDADE_ID = "id_escola";
    static final String TB_UNIVERSIDADE_NOME = "nome";
    static final String TB_UNIVERSIDADE_LOGRADOURO = "logradouro";
    static final String TB_UNIVERSIDADE_NUMERO = "numero";
    static final String TB_UNIVERSIDADE_COMPLEMENTO = "complemento";
    static final String TB_UNIVERSIDADE_CIDADE = "cidade";
    static final String TB_UNIVERSIDADE_ESTADO = "estado";
    static final String TB_UNIVERSIDADE_PAIS = "pais";
    static final String TB_UNIVERSIDADE_TELEFONE = "telefone";
    static final String TB_UNIVERSIDADE_DDD = "ddd";
    static final String TB_UNIVERSIDADE_DDI = "ddi";

    public boolean getUniversidadeByID(DTOUniversidade universidade)
    {
        PreparedStatement pst;
        ResultSet rs;
        boolean sucesso = false;

        try {
            Connection con = getConnection();

            pst = con.prepareStatement("SELECT * FROM "+ TB_UNIVERSIDADE +
                                        " WHERE "+ TB_UNIVERSIDADE_ID
                                        +" = ?");

            pst.setInt(1, universidade.getId());

            rs = pst.executeQuery();

            if(rs.next())
            {
                universidade.setNome(rs.getString(TB_UNIVERSIDADE_NOME));
                universidade.setLogradouro(rs.getString(TB_UNIVERSIDADE_LOGRADOURO));
                universidade.setNumero(rs.getString(TB_UNIVERSIDADE_NUMERO));
                universidade.setComplemento(rs.getString(TB_UNIVERSIDADE_COMPLEMENTO));
                universidade.setCidade(rs.getString(TB_UNIVERSIDADE_CIDADE));
                universidade.setEstado(rs.getString(TB_UNIVERSIDADE_ESTADO));
                universidade.setPais(rs.getString(TB_UNIVERSIDADE_PAIS));
                universidade.setTelefone(rs.getString(TB_UNIVERSIDADE_TELEFONE));
                universidade.setDdd(rs.getString(TB_UNIVERSIDADE_DDD));
                universidade.setDdi(rs.getString(TB_UNIVERSIDADE_DDI));
                universidade.setId(rs.getInt(TB_UNIVERSIDADE_ID));
                sucesso = true;
            }

            con.close();

        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return sucesso;
    }
    public ArrayList<DTOUniversidade> getUniversidadeBuscaInfo(String parametro/*, int offset, int limit*/) {
        PreparedStatement pst;
        ResultSet rs;

        DTOUniversidade dtoUniversidade = null;
        ArrayList<DTOUniversidade> listaUniversidades = new ArrayList<DTOUniversidade>();

        try {
            Connection con = getConnection();
            pst = con.prepareStatement(
                    "SELECT * FROM "+ TB_UNIVERSIDADE +
                    " WHERE upper(" + TB_UNIVERSIDADE_NOME + ") like ? "+
                    "OR upper(" + TB_UNIVERSIDADE_PAIS + ") like ? "+
                    "ORDER BY "+ TB_UNIVERSIDADE_NOME);
                    //" OFFSET ? LIMIT ?;");

            pst.setString(1, "%" + parametro.toUpperCase() + "%");
            pst.setString(2, "%" + parametro.toUpperCase() + "%");
            //st.setInt(3, offset);
            //st.setInt(4, limit);

            rs = pst.executeQuery();

            while (rs.next()) {
                dtoUniversidade = new DTOUniversidade();
                dtoUniversidade.setId(rs.getInt(TB_UNIVERSIDADE_ID));
                dtoUniversidade.setNome(rs.getString(TB_UNIVERSIDADE_NOME));
                dtoUniversidade.setPais(rs.getString(TB_UNIVERSIDADE_PAIS));
                dtoUniversidade.setTelefone(rs.getString(TB_UNIVERSIDADE_TELEFONE));
                dtoUniversidade.setDdd(rs.getString(TB_UNIVERSIDADE_DDD));
                listaUniversidades.add(dtoUniversidade);
            }
            return listaUniversidades;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void getUniversidadeInfo (DTOUniversidade universidade)
    {
        PreparedStatement pst;
        ResultSet rs;

        try {
            Connection con = getConnection();

            pst = con.prepareStatement("SELECT * FROM "+ TB_UNIVERSIDADE +
                                        " WHERE upper("+ TB_UNIVERSIDADE_NOME
                                        +") = ?");

            pst.setString(1, universidade.getNome().toUpperCase());

            rs = pst.executeQuery();

            if(rs.next())
            {
                universidade.setNome(rs.getString(TB_UNIVERSIDADE_NOME));
                universidade.setLogradouro(rs.getString(TB_UNIVERSIDADE_LOGRADOURO));
                universidade.setNumero(rs.getString(TB_UNIVERSIDADE_NUMERO));
                universidade.setComplemento(rs.getString(TB_UNIVERSIDADE_COMPLEMENTO));
                universidade.setCidade(rs.getString(TB_UNIVERSIDADE_CIDADE));
                universidade.setEstado(rs.getString(TB_UNIVERSIDADE_ESTADO));
                universidade.setPais(rs.getString(TB_UNIVERSIDADE_PAIS));
                universidade.setTelefone(rs.getString(TB_UNIVERSIDADE_TELEFONE));
                universidade.setDdd(rs.getString(TB_UNIVERSIDADE_DDD));
                universidade.setDdi(rs.getString(TB_UNIVERSIDADE_DDI));
                universidade.setId(rs.getInt(TB_UNIVERSIDADE_ID));
            }

            con.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    public boolean cadastrarUniversidade(DTOUniversidade universidade)
    {
        PreparedStatement pst;

        this.getUniversidadeInfo(universidade);

        if(universidade.getId() != -1)
            return false;

        try
        {
            Connection con = getConnection();

            pst = con.prepareStatement("INSERT INTO "+ TB_UNIVERSIDADE +
                                        " (" + TB_UNIVERSIDADE_NOME
                                        + "," + TB_UNIVERSIDADE_LOGRADOURO
                                        + "," + TB_UNIVERSIDADE_NUMERO
                                        + "," + TB_UNIVERSIDADE_COMPLEMENTO
                                        + "," + TB_UNIVERSIDADE_CIDADE
                                        + "," + TB_UNIVERSIDADE_ESTADO
                                        + "," + TB_UNIVERSIDADE_PAIS
                                        + "," + TB_UNIVERSIDADE_TELEFONE
                                        + "," + TB_UNIVERSIDADE_DDD
                                        + "," + TB_UNIVERSIDADE_DDI
                                        + ") VALUES (?,?,?,?,?,?,?,?,?,?)");

            pst.setString(1, universidade.getNome());
            pst.setString(2, universidade.getLogradouro());
            pst.setString(3, universidade.getNumero());
            pst.setString(4, universidade.getComplemento());
            pst.setString(5, universidade.getCidade());
            pst.setString(6, universidade.getEstado());
            pst.setString(7, universidade.getPais());
            pst.setString(8, universidade.getTelefone());
            pst.setString(9, universidade.getDdd());
            pst.setString(10, universidade.getDdi());

            pst.executeUpdate();

            this.getUniversidadeInfo(universidade);

            if(universidade.getId() != -1)
                return true;

            con.close();
        } catch (Exception e)
        {
            e.printStackTrace();
        }

        return false;
    }

    public boolean atualizarUniversidade(DTOUniversidade universidade)
    {
        PreparedStatement pst;

        try
        {
            Connection con = getConnection();

            pst = con.prepareStatement("UPDATE "+ TB_UNIVERSIDADE +
                                        " SET " + TB_UNIVERSIDADE_NOME
                                        + " = ?," + TB_UNIVERSIDADE_LOGRADOURO
                                        + " = ?," + TB_UNIVERSIDADE_NUMERO
                                        + " = ?," + TB_UNIVERSIDADE_COMPLEMENTO
                                        + " = ?," + TB_UNIVERSIDADE_CIDADE
                                        + " = ?," + TB_UNIVERSIDADE_ESTADO
                                        + " = ?," + TB_UNIVERSIDADE_PAIS
                                        + " = ?," + TB_UNIVERSIDADE_TELEFONE
                                        + " = ?," + TB_UNIVERSIDADE_DDD
                                        + " = ?," + TB_UNIVERSIDADE_DDI
                                        + " = ? WHERE " + TB_UNIVERSIDADE_ID + " = ?");

            pst.setString(1, universidade.getNome());
            pst.setString(2, universidade.getLogradouro());
            pst.setString(3, universidade.getNumero());
            pst.setString(4, universidade.getComplemento());
            pst.setString(5, universidade.getCidade());
            pst.setString(6, universidade.getEstado());
            pst.setString(7, universidade.getPais());
            pst.setString(8, universidade.getTelefone());
            pst.setString(9, universidade.getDdd());
            pst.setString(10, universidade.getDdi());
            pst.setInt(11, universidade.getId());

            pst.executeUpdate();

            this.getUniversidadeInfo(universidade);

            if(universidade.getId() != -1)
                return true;

            con.close();
        } catch (Exception e)
        {
            e.printStackTrace();
        }

        return false;
    }

    public Vector getUniversidades (DTOUniversidade universidade)
    {
        PreparedStatement pst;
        ResultSet rs;
        Vector universidades = new Vector();

        try {
            Connection con = getConnection();

            pst = con.prepareStatement("SELECT * FROM "+ TB_UNIVERSIDADE +
                                        " WHERE UPPER("+ TB_UNIVERSIDADE_NOME
                                        +") like ?");

            pst.setString(1, "%" + universidade.getNome().toUpperCase() + "%");

            rs = pst.executeQuery();

            while(rs.next())
            {
                universidade = new DTOUniversidade();
                universidade.setNome(rs.getString(TB_UNIVERSIDADE_NOME));
                universidade.setLogradouro(rs.getString(TB_UNIVERSIDADE_LOGRADOURO));
                universidade.setNumero(rs.getString(TB_UNIVERSIDADE_NUMERO));
                universidade.setComplemento(rs.getString(TB_UNIVERSIDADE_COMPLEMENTO));
                universidade.setCidade(rs.getString(TB_UNIVERSIDADE_CIDADE));
                universidade.setEstado(rs.getString(TB_UNIVERSIDADE_ESTADO));
                universidade.setPais(rs.getString(TB_UNIVERSIDADE_PAIS));
                universidade.setTelefone(rs.getString(TB_UNIVERSIDADE_TELEFONE));
                universidade.setDdd(rs.getString(TB_UNIVERSIDADE_DDD));
                universidade.setDdi(rs.getString(TB_UNIVERSIDADE_DDI));
                universidade.setId(rs.getInt(TB_UNIVERSIDADE_ID));
                universidades.add(universidade);
            }

            con.close();

        }
        catch (Exception e) {
            e.printStackTrace();
        }

        return universidades;
    }

}
